package com.yhb;

import com.example.bean.UserInfoBean;
import com.example.control.LoginControl;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

//配置运行注解的注解驱动类
@RunWith(SpringJUnit4ClassRunner.class)
//配置对应注解配置的配置文件
@ContextConfiguration("classpath:springconfig.xml")
public class testdemo {
    //    根据@Component配置的bean对象名，实例化Bean对象
    @Resource(name = "testController")
    private LoginControl testController;
    @Test
    public void test(){
        testController.doLogin();
    }

    public static void main(String[] args) {
        UserInfoBean userInfoBean = new UserInfoBean();
        System.out.println("使用new创建的javabean、javapojo类对象：\n" + userInfoBean);
        System.out.println("====================================================");
        // 使用spring来对bean进行管理

        test01();

        System.out.println("=====================");
        test02();
    }
    /**
     * spring 容器的使用 ioc的学习理解，多个实体bean之间的依赖注入
     */
    public static void test02(){
// 如果是控制台程序，可以使用spring 容器的管理类  applicationcontext进行spring容器及spring容器中bean的操作
        ApplicationContext context=new ClassPathXmlApplicationContext("springconfig.xml");
        //模拟登录的业务逻辑处理
        LoginControl loginControl=(LoginControl) context.getBean("LoginControl");
        //调用登录方式
        loginControl.doLogin();
    }

    /**
     * spring 容器的使用 ioc的学习理解
     */
    public static void test01() {
        // create and configure beans
        // 如果是控制台程序，可以使用spring 容器的管理类  applicationcontext进行spring容器及spring容器中bean的操作
        ApplicationContext context = new ClassPathXmlApplicationContext("springconfig.xml");
        // 简单工厂模式
        Object objUserInfoBean = context.getBean("UserInfoBean");

        System.out.println("从spring容器获取的javabean对象、pojo类：\n" + objUserInfoBean);

        Object objUserInfoBean2 = context.getBean("UserInfoBean");

        // spring容器中获取的bean默认的是一个单例模式
        System.out.println("objUserInfoBean == objUserInfoBean2:"+(objUserInfoBean == objUserInfoBean2));
        System.out.println("=---------------");
        Object objUserInfoBean3=context.getBean("UserInfoBean2");
        System.out.println("spring容器管理的javabean："+objUserInfoBean3);
    }

}
